// app application 应用程序
// 把当前模块所有的依赖项都声明再文件模块最上面
// 为了让目录结构保持统一清晰，所以我们约定，把所有的 HTML 文件都放到 views（视图） 目录中
// 我们为了方便的统一处理这些静态资源，所以我们约定把所有的静态资源都存放在 public 目录中
// 哪些资源能被用户访问，哪些资源不能被用户访问，我现在可以通过代码来进行非常灵活的控制
// / index.html
// /public 整个 public 目录中的资源都允许被访问
// 前后端融会贯通了，为所欲为
var fs = require('fs');
var http = require('http');
var url = require('url');
var template = require('art-template');
var comments = [
    {
      name: '张三',
      message: '今天天气不错！',
      dateTime: '2020-5-7'
    },
    {
      name: '李四',
      message: '今天天气不错！',
      dateTime: '2020-5-7'
    },
    {
      name: '王五',
      message: '今天天气不错！',
      dateTime: '2020-5-7'
    },
    {
      name: '赵六',
      message: '今天天气不错！',
      dateTime: '2020-5-7'
    },
    {
      name: '王二麻子',
      message: '今天天气不错！',
      dateTime: '2020-5-7'
    }
  ]

/* var server = http.createServer()
server.on('request', function (request, response) {
    response.end("hentai");
})
server.listen(3000, function () {}) */
// 简写
http
    .createServer(function(request,response){
        // 使用 url.parse 方法将路径解析为一个方便操作的对象，第二个参数为 true 表示直接将查询字符串转为一个对象（通过 query 属性来访问）
        var parseObj = url.parse(request.url, true);
        // 单独获取不包含查询字符串的路径部分（该路径不包含 ? 之后的内容）
        var pathname = parseObj.pathname;
        if(pathname === '/'){
            //返回首页
            fs.readFile('./views/index.html',function(err,data){
                if(err){
                    return response.end('404 Not Found!');
                }
                var tempStr = template.render(data.toString(),{
                    comments:comments
                })
                response.end(tempStr);
            })
        }else if(pathname === '/post'){
            fs.readFile('./views/post.html', function (err, data) {
                if (err) {
                  return response.end('404 Not Found!');
                }
                response.end(data);
              })
        }else if(pathname.indexOf('/public') === 0){
            /* ./是当前目录 */
            fs.readFile('.'+pathname,function(err,data){
                if(err){
                    return response.end('404 Not Found!');
                }
                response.end(data);
            })
        }else if(pathname === '/pinglun'){
          //无论 /pinglun?xxx 之后是什么，pathname 是不包含 ? 之后的那个路径
          // 我们已经使用 url 模块的 parse 方法把请求路径中的查询字符串给解析成一个对象了

          //    1. 获取表单提交的数据 parseObj.query
          //    2. 将当前时间日期添加到数据对象中，然后存储到数组中
          //    3. 让用户重定向跳转到首页 /
          //       当用户重新请求 / 的时候，我数组中的数据已经发生变化了，所以用户看到的页面也就变了
          var comment = parseObj.query;
          comment.dateTime = '2020-5-8';
          comments.unshift(comment);
          // 服务端这个时候已经把数据存储好了，接下来就是让用户重新请求 / 首页，就可以看到最新的留言内容了

          // 如何通过服务器让客户端重定向？
          //    1. 状态码设置为 302 临时重定向
          //        statusCode
          //    2. 在响应头中通过 Location 告诉客户端往哪儿重定向
          //        setHeader
          // 如果客户端发现收到服务器的响应的状态码是 302 就会自动去响应头中找 Location ，然后对该地址发起新的请求
          // 所以你就能看到客户端自动跳转了
          response.statusCode = 302;
          response.setHeader('Location', '/');
          response.end();
        }else{
            fs.readFile('./views/404.html',function(err,data){
                response.end(data);
            })
        }
    })
    .listen(3000,function(){
        console.log('running...');
        
    })
